/*
import axios from 'axios'
import { message } from 'ant-design-vue'

// 创建一个axios实例
const myAxios = axios.create({
  // 设置请求的基础URL
  baseURL: 'http://localhost:8080',
  // 设置请求超时时间
  timeout: 60000,
  // 设置是否携带cookie
  withCredentials: true,
})
// 全局请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  },
)

// 全局响应拦截器
myAxios.interceptors.response.use(
  function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const { data } = response
    //未登录
    if (data.code === 40100) {
      if (
        !response.request.responseURL.includes('user/get/login') &&
        !window.location.href.includes('user/login')
      ) {
        message.warning('请先登录')
        window.location.href = `/user/login?redirect=${window.location.href}`
      }
    }
    return response
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error)
  },
)
export default myAxios
*/


import axios from 'axios'
import { message } from 'ant-design-vue'
import { getToken } from '@/utils/auth.ts'

// 定义响应码常量
const ResponseCode = {
  SUCCESS: 0,
  UNAUTHORIZED: 40100,
}

// 创建一个axios实例
const myAxios = axios.create({
  baseURL: 'http://localhost:8080',
  timeout: 60000,
  withCredentials: true,
})

// 全局请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // 添加token认证
    const token = getToken()
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token
    }
    return config
  },
  function (error) {
    message.error('请求发送失败')
    return Promise.reject(error)
  },
)

// 全局响应拦截器
myAxios.interceptors.response.use(
  function (response) {
    const { data } = response
    //未登录
    if (data.code === ResponseCode.UNAUTHORIZED) {
      if (
        !response.request.responseURL.includes('user/get/login') &&
        !window.location.href.includes('user/login')
      ) {
        message.warning('请先登录')
        window.location.href = `/user/login?redirect=${encodeURIComponent(window.location.href)}`
      }
    }
    return response
  },
  function (error) {
    if (error.response) {
      const { status } = error.response
      switch (status) {
        case 403:
          message.error('没有权限访问该资源')
          break
        case 404:
          message.error('请求的资源不存在')
          break
        case 500:
          message.error('服务器内部错误')
          break
        default:
          message.error(`请求失败(${status})`)
      }
    } else if (error.request) {
      message.error('网络异常，请检查您的网络连接')
    } else {
      message.error('请求配置错误: ' + error.message)
    }
    return Promise.reject(error)
  },
)

export default myAxios
